<!DOCTYPE html>  
<html>
    <head>
        <meta charset="utf-8" />  
        <title>typeof、instacnof原理</title>  
    </head>
    <body>
        typeof、instacnof原理


        typeof: js在底层存储变量的时候，会在变量的机器码的低位1-3位存储其类型信息
                000: 对象
                010：浮点数
                100：字符串
                1：整数
                null所有机器码均为0，所以typeof判断其为object，判断其余所以对象也为object
                typeof判断new出来的字符串数据也均为对象
                注：typeof返回的结果为字符串
        
        
        instanceof: 其实判断一个对象是否是在原型链上能找到该构造函数原型
                其实 instanceof 主要的实现原理就是只要右边变量的 prototype 在左边变量的原型链上即可。
                因此，instanceof 在查找的过程中会遍历左边变量的原型链，直到找到右边变量的 prototype，
                如果查找失败，则会返回 false，告诉我们左边变量并非是右边变量的实例。

        
        Object.propotype.toString.call(): 准确判断各个数据类型


    </body>
    <script >  
        function new_instance_of(leftVaule, rightVaule) { 
            let rightProto = rightVaule.prototype; // 取右表达式的 prototype 值
            leftVaule = leftVaule.__proto__; // 取左表达式的__proto__值
            while (true) {
                if (leftVaule === null) {
                    return false;	
                }
                if (leftVaule === rightProto) {
                    return true;	
                } 
                leftVaule = leftVaule.__proto__ 
            }
        }
        console.log(Object.__proto__==Function.prototype)
        console.log(Function.prototype.__proto__==Object.__proto__.__proto__)
        console.log(Object.__proto__)
        console.log(Function.prototype.__proto__.__proto__)
    </script>  
</html>